import { defineStore } from 'pinia';
import { ref } from 'vue';

import { getWindowSize, isWindowMaximized, setWindowSize } from '@/api/system/app';
import config from '@/config';

export const useAiAssistantStore = defineStore(
  'aiAssistant',
  () => {
    // 助理面板是否可见
    const isVisible = ref(false);

    // 原始窗口大小（用于恢复）
    const originalWindowSize = ref<{ width: number; height: number } | null>(null);

    // 扩展后的窗口宽度
    const EXPANDED_WIDTH_INCREASE = 384; // 增加384px宽度

    // 检测是否在浏览器环境
    const isBrowser = ref(!config.isElectronEnvironment());

    // 检测是否需要扩展窗口
    const isNeedExpandWindow = async () => {
      if (isBrowser.value) {
        return false;
      }
      // Electron环境，检查是否最大化
      const result = await isWindowMaximized();
      return result.success && !result.data;
    };

    // 扩展窗口宽度
    const expandWindow = async () => {
      if (isBrowser.value) {
        // 浏览器环境不需要扩展窗口
        return;
      }

      try {
        // 检查是否需要扩展窗口
        const isNeedExpand = await isNeedExpandWindow();
        if (!isNeedExpand) {
          return;
        }

        // 获取当前窗口大小
        const sizeResult = await getWindowSize();
        if (sizeResult.success && sizeResult.data) {
          // 保存原始大小
          originalWindowSize.value = sizeResult.data;

          // 设置新的宽度
          const newWidth = sizeResult.data.width + EXPANDED_WIDTH_INCREASE;
          await setWindowSize(newWidth, sizeResult.data.height, true);
        }
      } catch (error) {
        console.error('Failed to expand window:', error);
      }
    };

    // 恢复窗口宽度
    const restoreWindow = async () => {
      if (isBrowser.value) {
        return;
      }

      try {
        // 检查是否需要扩展窗口
        const isNeedExpand = await isNeedExpandWindow();
        if (!isNeedExpand) {
          return;
        }

        // 如果原始大小为空，则获取当前窗口大小
        if (!originalWindowSize.value) {
          const sizeResult = await getWindowSize();
          if (sizeResult.success && sizeResult.data) {
            const width = sizeResult.data.width;
            const height = sizeResult.data.height;
            if (width > 1024) {
              originalWindowSize.value = { width: width - EXPANDED_WIDTH_INCREASE, height };
            } else {
              originalWindowSize.value = { width, height };
            }
          }
        }

        if (!originalWindowSize.value) {
          return;
        }

        // 恢复原始大小
        await setWindowSize(originalWindowSize.value.width, originalWindowSize.value.height, true);

        // 清除保存的原始大小
        originalWindowSize.value = null;
      } catch (error) {
        console.error('Failed to restore window:', error);
      }
    };

    // 显示助理面板
    const showAssistant = async () => {
      if (isVisible.value) return;

      await expandWindow();
      isVisible.value = true;
    };

    // 隐藏助理面板
    const hideAssistant = async () => {
      if (!isVisible.value) return;

      isVisible.value = false;
      await restoreWindow();
    };

    // 切换助理面板
    const toggleAssistant = async () => {
      if (isVisible.value) {
        await hideAssistant();
      } else {
        await showAssistant();
      }
    };

    return {
      isVisible,
      showAssistant,
      hideAssistant,
      toggleAssistant
    };
  },
  {
    persist: {
      key: 'aiAssistant-store',
      storage: localStorage
    }
  }
);
